package br.com.recipe.entity;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.Set;

public class Receita implements Serializable{

	private static final long serialVersionUID = 1L;
	private Long id;
	private Set<IngredienteReceita> listaIngredientes;
	private List<Receita> listaReceitas;
	private String modoPreparo;
	private Date tempoPreparo;
	private NivelDificuldade nivelDificuldade;
	private TipoReceita tipoReceita;
	private Rendimento rendimento;
	
	public Receita(){
		
	}

	public Receita(Long id, Set<IngredienteReceita> listaIngredientes,
			List<Receita> listaReceitas, String modoPreparo, Date tempoPreparo,
			NivelDificuldade nivelDificuldade, TipoReceita tipoReceita,
			Rendimento rendimento) {
		super();
		this.id = id;
		this.listaIngredientes = listaIngredientes;
		this.listaReceitas = listaReceitas;
		this.modoPreparo = modoPreparo;
		this.tempoPreparo = tempoPreparo;
		this.nivelDificuldade = nivelDificuldade;
		this.tipoReceita = tipoReceita;
		this.rendimento = rendimento;
	}

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public Set<IngredienteReceita> getListaIngredientes() {
		return listaIngredientes;
	}

	public void setListaIngredientes(Set<IngredienteReceita> listaIngredientes) {
		this.listaIngredientes = listaIngredientes;
	}

	public List<Receita> getListaReceitas() {
		return listaReceitas;
	}

	public void setListaReceitas(List<Receita> listaReceitas) {
		this.listaReceitas = listaReceitas;
	}

	public String getModoPreparo() {
		return modoPreparo;
	}

	public void setModoPreparo(String modoPreparo) {
		this.modoPreparo = modoPreparo;
	}

	public Date getTempoPreparo() {
		return tempoPreparo;
	}

	public void setTempoPreparo(Date tempoPreparo) {
		this.tempoPreparo = tempoPreparo;
	}

	public NivelDificuldade getNivelDificuldade() {
		return nivelDificuldade;
	}

	public void setNivelDificuldade(NivelDificuldade nivelDificuldade) {
		this.nivelDificuldade = nivelDificuldade;
	}

	public TipoReceita getTipoReceita() {
		return tipoReceita;
	}

	public void setTipoReceita(TipoReceita tipoReceita) {
		this.tipoReceita = tipoReceita;
	}

	public Rendimento getRendimento() {
		return rendimento;
	}

	public void setRendimento(Rendimento rendimento) {
		this.rendimento = rendimento;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		result = prime
				* result
				+ ((listaIngredientes == null) ? 0 : listaIngredientes
						.hashCode());
		result = prime * result
				+ ((listaReceitas == null) ? 0 : listaReceitas.hashCode());
		result = prime * result
				+ ((modoPreparo == null) ? 0 : modoPreparo.hashCode());
		result = prime
				* result
				+ ((nivelDificuldade == null) ? 0 : nivelDificuldade.hashCode());
		result = prime * result
				+ ((rendimento == null) ? 0 : rendimento.hashCode());
		result = prime * result
				+ ((tempoPreparo == null) ? 0 : tempoPreparo.hashCode());
		result = prime * result
				+ ((tipoReceita == null) ? 0 : tipoReceita.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Receita other = (Receita) obj;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		if (listaIngredientes == null) {
			if (other.listaIngredientes != null)
				return false;
		} else if (!listaIngredientes.equals(other.listaIngredientes))
			return false;
		if (listaReceitas == null) {
			if (other.listaReceitas != null)
				return false;
		} else if (!listaReceitas.equals(other.listaReceitas))
			return false;
		if (modoPreparo == null) {
			if (other.modoPreparo != null)
				return false;
		} else if (!modoPreparo.equals(other.modoPreparo))
			return false;
		if (nivelDificuldade != other.nivelDificuldade)
			return false;
		if (rendimento == null) {
			if (other.rendimento != null)
				return false;
		} else if (!rendimento.equals(other.rendimento))
			return false;
		if (tempoPreparo == null) {
			if (other.tempoPreparo != null)
				return false;
		} else if (!tempoPreparo.equals(other.tempoPreparo))
			return false;
		if (tipoReceita != other.tipoReceita)
			return false;
		return true;
	}

	@Override
	public String toString() {
		return "Receita [id=" + id + ", listaIngredientes=" + listaIngredientes
				+ ", listaReceitas=" + listaReceitas + ", modoPreparo="
				+ modoPreparo + ", tempoPreparo=" + tempoPreparo
				+ ", nivelDificuldade=" + nivelDificuldade + ", tipoReceita="
				+ tipoReceita + ", rendimento=" + rendimento + "]";
	}	
	
}
